package com.csi.mapper;

import com.csi.domain.FacilityInfo;
import com.csi.domain.Room;
import com.csi.domain.RoomType;
import com.csi.domain.RoomtypeFacility;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface RoomTypeMapper {


    /**
     * 添加房间类型
     * @param roomType 房间类型
     * @return 执行条数
     */
    int save(RoomType roomType);

    int saveRooms(@Param("rooms") List<Room> rooms);

    /**
     * 更新房间类型 更新房型 更新房型设施(先删除后增加)
     * @param roomType 房间类型
     * @return 执行条数
     */

    int update(RoomType roomType);
    int delete(long id);

    int saveRoomTypeFacilities(@Param("roomtypeFacilities") List<RoomtypeFacility> roomtypeFacilities);

    /**
     * 根据id查找房型
     * @param roomtypeId 房型id
     * @return 请求结果
     */
    RoomType findById(long roomtypeId);


    /**
     * 根据酒店id查询房型
     * @param hotelId 酒店id
     * @return 请求结果
     */
    List<RoomType> findAll(long hotelId);


    /**
     * 线下入住 默认点击后会更改一个房间的状态，房型数量-1
     * @param roomtypeId 房型id
     * @return 请求结果
     */
    int checkInOffline(@Param("roomtypeId") long roomtypeId,@Param("checkInfoOfficeRoomStatus")String checkInfoOfficeRoomStatus);

    int updateRoomtypeNum(long roomtypeId);


    /**
     * 根据房型id查找对应的房型设置
     * @param roomtypeId
     * @return
     */
    List<FacilityInfo> findFacilityInfo(long roomtypeId);

    /**
     * 根据酒店id查找房型设施
     * @param hotelId
     * @return
     */
    List<FacilityInfo> findFacility(long hotelId);

    /**
     * 根据酒店id查找房间
     * @param hotelId
     * @return
     */
    @MapKey("id")
    Map<String, Object> findRooms(long hotelId);

    /**
     * 添加房型审核
     * @param roomType
     * @return
     */
    int insertAudit(RoomType roomType);

    /**
     * 查询对应的房型设施id
     * @param roomtypeId
     * @return
     */
    Integer[] findRoots(long roomtypeId);
}
